[Инструкция] Полная инструкция по оптимизации и очистке Debian 12

Debian 12 – стабильный и надёжный серверный дистрибутив, но даже на нём время от времени требуется чистка и оптимизация для освобождения места на диске и поддержания производительности. В этой статье рассмотрим основные этапы и инструменты для оптимизации.

1. Проверка дискового пространства

Сначала увидим текущую загрузку диска:

df -h

Просмотр размера каталогов в корневом разделе:

du -h --max-depth=1 /

Это позволит определить «тяжёлые» папки.

2. Очистка кэша пакетного менеджера

APT сохраняет установочные пакеты в кэше, чтобы не загружать их повторно.

Очистить весь кэш:

apt clean

Удалить устаревшие пакеты из кэша:

apt autoclean

3. Удаление неиспользуемых и зависимых пакетов

Через время системный мусор накапливается в виде неиспользуемых библиотек:

apt autoremove

4. Очистка журналов системы

Логи могут занимать много места, особенно systemd-journal.

Просмотр размера логов:

du -sh /var/log/*

Очистка журналов systemd старше определённого размера, например сузить журнал до 500 МБ:

journalctl --vacuum-size=500M

Удаление всех журналов (будь осторожен, это стирает логи):

rm -rf /var/log/journal/*
systemctl restart systemd-journald

Полное удаление журналов может затруднить диагностику, если потребуется.

Также можно очистить старые файлы логов btmp и wtmp, которые отвечают за логи входов:

> /var/log/btmp
> /var/log/btmp.1
> /var/log/wtmp

5. Поиск и очистка больших файлов

Чтобы отыскать файлы, которые занимают много места (например больше 100 МБ):

find / -type f -size +100M -exec ls -lh {} \;

Просмотри эти файлы и удали или перемести ненужные.

6. Чистка домашнего кэша

Пользовательские кэши могут расти многократно.

Для root:

rm -rf /root/.cache/*

Для обычного пользователя:

rm -rf ~/.cache/*

7. Управление swap

Чтобы улучшить производительность, иногда полезно проверить swap.

Просмотр swap:

swapon --show
free -h

Отключение swap (временно):

swapoff -a

Важно: после отключения swap он останется выключенным, пока не включить его вручную или не перезагрузить сервер.

Чтобы очистить swap без перезагрузки, рекомендуем сделать отключение и повторное включение:

swapoff -a
swapon -a

Это освободит swap и вернёт его в работу без перезапуска системы.

8. Оптимизация и очистка системных служб

Смотреть и отключать неиспользуемые службы:

systemctl list-unit-files --state=enabled
systemctl disable имя_службы

9. Проверка и очистка временных файлов в /tmp

Перед тем как удалять файлы из /tmp, рекомендуется проверить, что там нет важных или используемых системой и процессами данных.

Проверка содержимого /tmp

Посмотреть список файлов и их даты создания:

ls -lht /tmp

Если выводимый список пустой (total 0), значит в /tmp сейчас нет файлов – удалить можно безопасно.

Проверка занятости /tmp процессами

Посмотреть, какие процессы используют файлы в /tmp:

lsof +D /tmp

Если команда не найдена, установи инструмент:

apt install lsof

Если вывод пуст – значит процессы не блокируют /tmp и файлы не используются.

Дополнительная проверка процессов с /tmp

Можно посмотреть процессы, работающие с временной папкой:

fuser -v /tmp

Если этот вывод пустой, то /tmp свободна для очистки.

Проверка устаревших файлов

Найти файлы в /tmp старше одного дня:

find /tmp -type f -mtime +1 -ls

Это поможет выявить старые временные файлы, которые можно удалить без риска.

Итоги

И после проверки можно очистить временные файлы:

rm -rf /tmp/*

10. Обновление и оптимизация системы

Обновить пакеты до последних версий:

apt update && apt upgrade -y

Проверить целостность установленных пакетов и очистить неиспользуемые:

deborphan

11. Автоматизация очистки: настройка cron

Пример задания в cron для очистки кэша пакетов и старых логов еженедельно.

Файл /etc/cron.weekly/cleanup

Открываем:

nano /etc/cron.weekly/cleanup

Вставляем:

#!/bin/bash
# Скрипт для автоматической очистки кэша, неиспользуемых пакетов, системных журналов и временных файлов /tmp
# Выполнять только с правами root!

echo "cleanup запущен: $(date)" >> /var/log/cleanup.log
echo "Начинаем очистку системы..." >> /var/log/cleanup.log

# Полные пути к командам
APT_BIN="/usr/bin/apt"
JOURNALCTL_BIN="/usr/bin/journalctl"
LSOF_BIN="/usr/bin/lsof"
FIND_BIN="/usr/bin/find"
RM_BIN="/bin/rm"

# Очистка кэша APT
$APT_BIN clean

# Удаление неиспользуемых пакетов
$APT_BIN autoremove -y

# Важно: рекомендуется использовать команду 'journalctl --vacuum-size=500M' для безопасного ограничения размера системных журналов.
# Полное удаление папки /var/log/journal/ может привести к потере важных логов и усложнить диагностику системы.

# Ограничение размера системных журналов до 500 МБ
$JOURNALCTL_BIN --vacuum-size=500M

# Проверяем, используются ли файлы в /tmp процессами
if $LSOF_BIN +D /tmp >/dev/null 2>&1; then
    echo "Предупреждение: В /tmp есть файлы, занятые процессами. Полная очистка отложена." >> /var/log/cleanup.log
    echo "Удаляем только файлы в /tmp старше одного дня..." >> /var/log/cleanup.log
    $FIND_BIN /tmp -mindepth 1 -mtime +1 -exec $RM_BIN -rf {} +
else
    echo "Файлы в /tmp не заняты процессами. Выполняем полную очистку /tmp." >> /var/log/cleanup.log
    # Удаляем все файлы в /tmp, включая скрытые (кроме . и ..)
    $RM_BIN -rf /tmp/* /tmp/.[!.]*
fi

echo "Очистка завершена." >> /var/log/cleanup.log

Этот скрипт проверяет, заняты ли файлы в /tmp, и если да – безопасно удаляет только устаревшие (старше суток). Если /tmp свободна – удаляет всё полностью.

Дать права на выполнение:

chmod +x /etc/cron.weekly/cleanup

11.1 Ручная очистка Docker и системных журналов

Если в вашей системе ещё нет автоматизированных заданий для очистки Docker и логов, можно выполнять эти действия вручную.

Внимание:
Команда docker system prune -a --volumes -f удаляет все остановленные контейнеры, неиспользуемые образы, тома и сети. Это может привести к потере данных, если важные тома или контейнеры не используются в данный момент, но нужны вам позже. Перед выполнением убедитесь, что вы не потеряете нужную информацию.

Для очистки неиспользуемых данных Docker выполните команду:

docker system prune -a --volumes -f

Она удалит все остановленные контейнеры, неиспользуемые образы, тома и сети.

Если Docker не используется длительное время, можно временно остановить сервис и отключить его автозапуск:

sudo systemctl stop docker
sudo systemctl disable docker

Это освободит системные ресурсы и предотвратит автоматический запуск Docker при загрузке.

Для уменьшения размера системных журналов выполните:

journalctl --vacuum-size=500M

Эта команда оставит в журналах только 500 МБ самых свежих записей, удаляя старые.

Чтобы убедиться, что команды работают правильно при автоматическом запуске (например, в cron), рекомендуется использовать полные пути к ним.

Узнать полный путь легко:

which docker
which journalctl

Чаще всего это:

/usr/bin/docker
/usr/bin/journalctl

В следующих разделах рассмотрим, как настроить автоматическую очистку с учётом этого.

11.2 Настройка автоматической очистки через cron

Откройте редактор crontab от имени root:

sudo crontab -e

Добавьте строку для еженедельного выполнения очистки (например, каждый понедельник утром в 3 часа):

0 3 * * 1 /usr/bin/docker system prune -a --volumes -f && /usr/bin/journalctl --vacuum-size=500M >/dev/null 2>&1

Итоги

Регулярная очистка и мониторинг позволит поддерживать Debian 12 в оптимальном состоянии:

12. Команды для проверки работы скрипта и автозапуска через cron

Проверка прав и местоположения скрипта

ls -l /etc/cron.weekly/cleanup

Запуск скрипта вручную

sudo /etc/cron.weekly/cleanup

Просмотр лога работы скрипта

cat /var/log/cleanup.log

Проверка статуса службы cron

systemctl status cron

Проверка логов cron через системный журнал

grep CRON /var/log/syslog

Проверка логов cron через systemd journal

journalctl -u cron